Relational databases have become the standard for storing large datasets. In general, a relational database consists of multiple tables. Each row in each such table (also referred to as a “record”) contains multiple columns (also referred to as “fields”). Each table has a particular column, which is referred to as the table's “primary key,” and which is used to uniquely identify each record in the table. For example, a table may have a “unique identifier” column, and the value of the unique identifier column in each record in the table may be unique among all records in the table. Different tables in the relational database may be related to each other by referring to the primary key of a first table within a column of a second table. In this case, the first table's primary key within the second table plays the role of a “foreign key” within the second table. For example, a table of employee birthdays may refer to employees by their Social Security Number (foreign key), where Social Security Number is the primary key of another table containing other information about employees.
One benefit of relational databases in comparison to databases consisting of only a single table is that a relational database may represent relations among multiple sets of data. As a result, existing but disparate sets of data may be linked together in a single relational database without requiring all of the sets of data to be reformatted to share the same structure. Instead, to bring together disparate data sets into a single relational database, only the relations (primary keys and foreign keys) need to be encoded into the data sets. This can enable operations, such as searching and sorting, to be performed on disparate data sets with relatively little effort in comparison to the effort of combining all data sets into a single table.
Despite the benefits of relational databases, relational databases also have a variety of drawbacks. For example, to search a relational database typically requires formulating a query in a formal query language, such as Structured Query Language (SQL). SQL is a complex language, and formulating a query in SQL can require significant technical expertise. Furthermore, formulating a query in SQL requires detailed knowledge of the structure (e.g., columns, primary keys, and primary-foreign key relations) of the relational database to be searched. As a result, formulating a query in SQL can be tedious, time-consuming, and error-prone.
Furthermore, because the relations in relational databases are based on relations between predetermined primary keys in distinct tables, the relations that can be represented in a relational database are inherently restricted to the relations that can be formed between primary keys in the relational database. As a result, queries formulated in SQL and executed on a relational database can only be used to search for relations that have been encoded into the database using relations between existing, predetermined, primary keys in the relational database.
What is needed, therefore, are techniques for overcoming these limitations of relational databases and of SQL-based searching.